<?php

/**
 * @user magein
 * @date 2023/12/1 13:40
 */

namespace magein\sms;

/**
 * 设置发送短信的目标信息
 *  手机号码
 *  短信内容（这里区分是验证码还是营销类短信）
 *  使用的平台
 *  使用的账号
 *  短信签名
 *  其他参数（平台不一样，可以传递其他参数）
 */
class Target
{
    /**
     * 目标手机号码
     * @var mixed|string
     */
    protected $phone = '';

    /**
     * 短信内容
     * @var mixed|string
     */
    protected $content = '';

    /**
     * 短信签名
     * @var mixed|string
     */
    protected $signature = '';

    /**
     * 使用的平台
     * @var mixed|string
     */
    protected $platform = '';

    /**
     * 使用的账号
     * @var string
     */
    protected $account = '';

    /**
     * @var string
     */
    protected $template_id = '';

    /**
     * 传递的所有参数
     * @var array
     */
    protected $others = [];

    public function __construct($params)
    {
        $this->content = $params['content'] ?? '';
        $this->phone = $params['phone'] ?? '';
        $this->signature = $params['signature'] ?? '';
        $this->platform = $params['platform'] ?? '';
        $this->account = $params['account'] ?? '';
        $this->template_id = $params['template_id'] ?? '';
        $this->others = $params['others'] ?? [];
    }

    /**
     * 获取短信内容
     * @return string
     */
    public function getContent(): string
    {
        if (is_array($this->content)) {
            return json_encode($this->content, JSON_UNESCAPED_UNICODE);
        }
        
        return $this->content;
    }

    /**
     * @param string $content
     * @return void
     */
    public function setContent(string $content = '')
    {
        $this->content = $content;
    }

    /**
     * 获取目标手机号码
     * @return string
     */
    public function getPhone(): string
    {
        return $this->phone;
    }

    /**
     * 获取签名
     * @return string
     */
    public function getSignature(): string
    {
        return $this->signature;
    }

    /**
     * 发送平台
     * @return string
     */
    public function getPlatform(): string
    {
        return $this->platform;
    }

    /**
     * @return string
     */
    public function getAccount(): string
    {
        return $this->account ?: '';
    }

    /**
     * @param string|integer $template_id
     * @return void
     */
    public function setTemplateId($template_id)
    {
        $this->template_id = $template_id;
    }

    /**
     * @return string|integer
     */
    public function getTemplateId()
    {
        return $this->template_id ?: '';
    }

    /**
     * @param $key
     * @return mixed|string
     */
    public function getOther($key = null)
    {
        return $this->others[$key] ?? null;
    }

    /**
     * @return array
     */
    public function getOthers(): array
    {
        return $this->others ?: [];
    }

    /**
     * @param array $others
     * @return void
     */
    public function setOthers(array $others)
    {
        $this->others = $others;
    }

    /**
     * @param $key
     * @param $value
     * @return void
     */
    public function setOther($key, $value)
    {
        if ($key) {
            $this->others[$key] = $value;
        }
    }
}